package app.controllers;

import app.models.FluxoCaixa;
import app.models.Produto;
import app.models.enums.TipoFluxoCaixa;
import app.services.FluxoCaixaService;
import app.services.LogService;
import app.services.ProdutoService;
import app.util.Constants;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;

@Resource
public class FluxoCaixaController extends Controller{

	private Result result;
	private Validator validator;
	private FluxoCaixaService service;
	private ProdutoService produtoService;
	private LogService logService;
	
	public FluxoCaixaController(Result result, Validator validator, FluxoCaixaService service, 
			ProdutoService produtoService, LogService logService){
		this.result = result;
		this.validator = validator;
		this.service = service;
		this.produtoService = produtoService;
		this.logService = logService;
	}
	
	@Get("/fluxoCaixa")
	public void index() { 
		result.include("fluxoCaixas", service.findAllOrdered());
		result.include("ultimosFluxoCaixas", service.findLastCreditos());
	}

	@Get("/fluxoCaixa/new")
	public void form() {
		result.include("tiposFluxoCaixa", TipoFluxoCaixa.values());
		result.include("produtos", produtoService.findAll());
	}
	
	@Post("/fluxoCaixa/save")
	public void save(FluxoCaixa fluxoCaixa){
		
		validator.validate(fluxoCaixa);
		
		Produto produto = produtoService.find(fluxoCaixa.getIdProduto().longValue());
		
		fluxoCaixa.setValorTotal(fluxoCaixa.getQuantidade() * produto.getValorUnitario());
		
		validator.onErrorForwardTo(this).form();
		
		service.updateProductAmount(fluxoCaixa);
		
		service.create(fluxoCaixa);
		
		logService.createLog(Constants.NEW_FLUXO_CAIXA + fluxoCaixa.getId());
		
		result.forwardTo(this).index();
	}
	
}
